home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 35 / Amiga Format AFCD35 (Issue 119, Jan 1999).iso / -in_the_mag- / reader_requests / fredobbutils / bbsrc / bootblock.s < prev    next >
Text File  |  1998-11-06  |  5KB  |  348 lines

  1. ************* Bootblock spécial *****************
  2. * - affiche un texte sur un fond de copper    *
  3. * - attend un clic de souris            *
  4. **************** by  Frédo!! ********************
  5. *
  6. * Generic Bootblock Example:
  7. * - setup graphic environment
  8. * - draw copper list
  9. * - print a text
  10. * All system-friendly (I hope!!)
  11.  
  12.     incdir    asm:/Include/
  13.     include    equ.s
  14.     include    exec/types.i
  15.     include    graphics/text.i
  16.     include    graphics/gfx.i
  17.     include    graphics/rastport.i
  18.  
  19.     rsreset
  20. planes    rs.l    1
  21. gfxbase    rs.l    1
  22. olddma    rs.w    1
  23. ;myfont    rs.l    1
  24. ;oldcop1    rs.l    1
  25. xstart    rs.w    1
  26. ystart    rs.w    1
  27. scrw    rs.w    1
  28. scrh    rs.w    1
  29. charw    rs.w    1
  30. charh    rs.w    1
  31. rast    rs.b    rp_SIZEOF
  32. bmap    rs.b    bm_SIZEOF
  33. VARSIZE    rs.w    0
  34.  
  35. WIDTH=320*1
  36. HEIGHT=256
  37. DEPTH=2
  38. PLSIZE=(WIDTH/8)*HEIGHT
  39. PLANESIZE=PLSIZE*DEPTH
  40.  
  41. COL0=$422
  42. COL1=$338
  43. COL2=$76d
  44. COL3=$777
  45.  
  46. ;DBUG=0        ;uncomment this for debug mode
  47.  
  48. Start:
  49.     IFND    DBUG
  50.     dc.b    "DOS",1
  51.     dc.l    0,$370
  52.     ENDC
  53. Main:
  54.     IFD    DBUG
  55.     move.l    4.w,a6
  56.     ENDC
  57.     movem.l    d0-a6,-(sp)
  58.     lea    -VARSIZE(sp),sp    ;on utilise la pile comme base des variables
  59.     move.l    sp,a5        ;VarBase en a5
  60.  
  61.     move.l    $9c(a6),gfxbase(a5)
  62. * Allouer buffer pour les bitplanes & copperlist
  63.     move.l    #BUFSIZE,d0
  64.     move.l    #$10002,d1
  65.     jsr    AllocMem(a6)
  66.     move.l    d0,planes(a5)
  67.     beq.w    fin
  68.     move.l    d0,d4
  69.  
  70.     lea    rast(a5),a1
  71.     move.l    a1,-(sp)
  72.     move.l    gfxbase(a5),a6
  73.     jsr    InitRastPort(a6)
  74.  
  75.     lea    bmap(a5),a0
  76.     move.l    a0,-(sp)
  77. * adresse des bitplanes
  78. ;    lea    bm_Planes(a0),a0
  79.     addq.l    #8,a0
  80.     moveq    #DEPTH-1,d0
  81. .pl    move.l    d4,(a0)+
  82.     add    #PLSIZE,d4
  83.     dbf    d0,.pl
  84.     move.l    (sp)+,a0
  85.     move.l    (sp)+,a1
  86.     move.l    a0,rp_BitMap(a1)
  87.     moveq    #DEPTH,d0
  88.     move    #WIDTH,d1
  89.     move    #HEIGHT,d2
  90.     movem    d1-d2,scrw(a5)
  91.     jsr    InitBitMap(a6)
  92.  
  93.     lea    rast(a5),a1
  94.     move.l    a1,a3
  95.     moveq    #1,d0
  96.     jsr    SetAPen(a6)
  97.     move.l    a3,a1
  98.     moveq    #0,d0
  99.     jsr    SetDrMd(a6)
  100.  
  101.     lea    topaz8(pc),a0
  102.     move.l    154(a6),a1    ;gfxbase->defaultfont
  103.     move.l    10(a1),(a0)    ;node name->font name
  104.     jsr    OpenFont(a6)
  105.     move.l    d0,-(sp)
  106.     move.l    d0,a1
  107.     jsr    CloseFont(a6)
  108.     move.l    a3,a1
  109.     move.l    (sp)+,a0
  110.     jsr    SetFont(a6)
  111.     move.l    a3,a1
  112.     moveq    #FSF_BOLD,d0
  113. ;    moveq    #0,d0
  114.     move.l    d0,d1
  115.     jsr    -90(a6)        ;SetSoftStyle()
  116. .nofont
  117.     moveq    #0,d0
  118.     moveq    #60,d1
  119.     movem    d0-d1,xstart(a5)
  120.     lea    texte(pc),a0
  121.     bsr.w    print
  122.  
  123.     lea    $dff000,a4
  124.     move    $02(a4),olddma(a5)
  125.     or    #$8000,olddma(a5)
  126.     move    #$7fff,$96(a4)    ;dma off
  127.     lea    coplist(pc),a1
  128. * adresse des bitplanes
  129.     move.l    planes(a5),d0
  130.     move.l    d0,a2
  131.     move    d0,lo1-coplist(a1)
  132.     swap    d0
  133.     move    d0,hi1-coplist(a1)
  134.     lea    PLSIZE(a2),a2
  135.     move.l    a2,d0
  136.     move    d0,lo2-coplist(a1)
  137.     swap    d0
  138.     move    d0,hi2-coplist(a1)
  139. * copier copperlist ds buffer
  140.     lea    PLSIZE(a2),a2
  141.     move.l    a2,a3
  142.     move    #(COPSIZE/4)-1,d0
  143. .copy
  144.     move.l    (a1)+,(a2)+
  145.     dbf    d0,.copy
  146.  
  147.     move.l    a3,$80(a4)
  148.     clr    $88(a4)
  149.     move    #%1000011111000000,$96(a4)    ;mon dma
  150.  
  151. .w    btst    #6,$bfe001
  152.     bne.s    .w
  153.  
  154. closeall
  155.     move.l    planes(a5),a1
  156.     move.l    #BUFSIZE,d0
  157.     move.l    4.w,a6
  158.     jsr    FreeMem(a6)
  159. restore
  160.     move.l    $9c(a6),a0
  161.     move.l    38(a0),$80(a4)
  162.     clr    $88(a4)
  163.     move    olddma(a5),$96(a4)
  164. fin
  165.     lea    VARSIZE(sp),sp    ;restitue la pile
  166.     movem.l    (sp)+,d0-a6
  167.  
  168. Init:
  169.     IFND    DBUG
  170.     lea    expansion.name(pc),a1
  171.     moveq    #37,d0
  172.     jsr    -552(a6)
  173.     tst.l    d0
  174.     beq.b    .err
  175.     move.l    d0,a1
  176.     bset    #6,34(a1)
  177.     jsr    -414(a6)
  178. .err    lea    dos.name(pc),a1
  179.     jsr    -96(a6)
  180.     tst.l    d0
  181.     beq.b    .nodos
  182.     move.l    d0,a0
  183.     move.l    22(a0),a0
  184.     moveq    #0,d0
  185.     rts
  186. .nodos    moveq    #-1,d0
  187.     ENDC
  188.     rts
  189.  
  190. *** Sortir du texte
  191. * <-- a0: adr texte (terminé par 0)
  192. print
  193.     movem.l    d0-a6,-(sp)
  194.     movem    xstart(a5),d0-d1
  195. ;    move.l    gfxbase(a5),a6
  196.     lea    rast(a5),a3
  197.     move.l    rp_Font(a3),a1
  198.     move    tf_XSize(a1),charw(a5)
  199.     move    tf_YSize(a1),charh(a5)
  200.     addq    #1,charw(a5)
  201.     addq    #2,charh(a5)
  202. .readchars
  203.     move.b    (a0)+,d7
  204.     beq.w    .f
  205.     cmp.b    #9,d7            tab
  206.     beq.b    .tab
  207.     cmp.b    #$a,d7            linefeed
  208.     beq.b    .lf
  209.     cmp.b    #$c,d7            cls
  210.     beq.b    .clrsc
  211.     bsr.b    .pr
  212.     add    charw(a5),d0
  213.     bra.b    .readchars
  214. .tab
  215.     moveq    #8,d2
  216.     mulu    charw(a5),d2
  217.     add    d2,d0
  218.     bra.b    .readchars
  219. .lf
  220.     add    charh(a5),d1
  221.     move    xstart(a5),d0
  222.     bsr.b    .mov
  223.     bra.b    .readchars
  224. .clrsc
  225.     bsr.b    ClrSc
  226.     move    xstart(a5),d0
  227.     move    ystart(a5),d1
  228.     bra.b    .readchars
  229. .pr
  230.     bsr.b    .mov
  231.     bsr.b    .tx
  232.     movem.l    a0/d0/d1,-(sp)
  233.     move.l    a3,a1
  234.     moveq    #2,d0
  235.     jsr    SetAPen(a6)
  236.     movem.l    (sp)+,a0/d0/d1
  237.     movem.l    d0-d1,-(sp)
  238.     addq    #2,d0
  239.     subq    #2,d1
  240.     bsr.b    .mov
  241.     movem.l    (sp)+,d0-d1
  242. .tx
  243.     movem.l    a0/d0/d1,-(sp)
  244.     subq.l    #1,a0
  245.     move.l    a3,a1
  246.     moveq    #1,d0
  247.     jsr    Text(a6)
  248.     move.l    a3,a1
  249.     moveq    #1,d0
  250.     jsr    SetAPen(a6)
  251.     bra.b    .ok1
  252. .mov
  253.     cmp    scrw(a5),d0
  254.     blt.b    .ok
  255.     clr    d0
  256.     add    charh(a5),d1
  257.     cmp    scrh(a5),d1
  258.     blt.b    .ok
  259.     bsr.b    ClrSc
  260.     move    xstart(a5),d0
  261.     move    ystart(a5),d1
  262. .ok
  263.     movem.l    a0/d0/d1,-(sp)
  264.     move.l    a3,a1
  265.     jsr    Move(a6)
  266. .ok1    movem.l    (sp)+,a0/d0/d1
  267.     rts
  268.  
  269. .f
  270.     movem    d0-d1,xstart(a5)
  271.     movem.l    (sp)+,d0-a6
  272.     rts
  273. *** Effacer l'écran
  274. ClrSc
  275.     movem.l    d0-a6,-(sp)
  276.     lea    rast(a5),a1
  277.     move.l    gfxbase(a5),a6
  278.     jsr    ClearScreen(a6)
  279.     movem.l    (sp)+,d0-a6
  280.     rts
  281.  
  282. *** DATA
  283. LORES=(DEPTH<<12)!$200
  284. HIRES=LORES!$8000
  285. LACE=4
  286.  
  287. RES=LORES
  288.  
  289. coplist:
  290.  DC.w $0100,RES
  291.  dc.w $008E,$2981
  292.  DC.w $0090,$29c1
  293.  IF RES=LORES
  294.  dc.w $0092,$003c
  295.  DC.w $0094,$00D4
  296.  ELSE
  297.  dc.w $0092,$0038
  298.  DC.w $0094,$00D0
  299.  ENDC
  300.  DC.w $0180,COL0
  301.  dc.w $0182,COL1
  302.  dc.w $0184,COL2
  303.  dc.w $0186,COL3
  304.  dc.w $00e0
  305. hi1:dc.w 0
  306.  dc.w $00e2
  307. lo1:dc.w 0
  308.  dc.w $00e4
  309. hi2:dc.w 0
  310.  dc.w $00e6
  311. lo2:dc.w 0
  312.  
  313. col set $000
  314. yst set 26
  315. n=7
  316.  REPT n
  317.  dc.w $180,col
  318.  dc.b yst,$0f
  319.  dc.w -2
  320. col set col+$111
  321. yst set yst+12
  322.  ENDR
  323.  REPT n
  324. col set col-$111
  325.  dc.w $180,col
  326.  dc.b yst+2,$0f
  327.  dc.w -2
  328. yst set yst+12
  329.  ENDR
  330.  dc.w $FFFF,$FFFE    ;fin de la liste copper
  331. COPSIZE=*-coplist
  332. BUFSIZE=PLANESIZE+COPSIZE
  333.  
  334. topaz8    dc.l    0
  335.     dc.w    8
  336.     dc.b    0
  337.     dc.b    0
  338.  
  339. dos.name    dc.b    'dos.library',0
  340. expansion.name    dc.b    'expansion.library',0
  341.  
  342. texte
  343.  dc.b "FREDO's *ASM-SOURCES* VOL. III",$a
  344.  dc.b 0
  345.  
  346. End:
  347.     dcb.b    512,0
  348.